package com.jy.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jy.entity.Adimin;
import com.jy.entity.QueryPageParam;
import com.jy.service.Adiminservice;
import org.springframework.web.bind.annotation.*;
import utils.JwtUtils;
import utils.Result;

import javax.annotation.Resource;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.List;

@RestController
@CrossOrigin
public class AdiminContriller {
    @Resource
    private Adiminservice adiminservice;
//    登录页面
    @PostMapping("/daofou/login")
    public Result login(@RequestBody Adimin adimin) {
        System.out.println("Adimin的值" + adimin);
//      查询该该消息是否正确
        List<Adimin> list = adiminservice.lambdaQuery().eq(Adimin::getAccount, adimin.getAccount()).eq(Adimin::getPwd, adimin.getPwd()).list();
//        验证管理员信息==如果中间的信息不为空则返回ok
        if (list.size() > 0) {
            Adimin user1 = (Adimin) list.get(0);
            String token = JwtUtils.generateToken(user1.getAccount());
            System.out.println(">>>>>查询的登录信息：" + user1 + "<<<<<");
//            验证IP
            if (adimin.getLastIp() != null) {
//              更新管理登录信息
                Adimin adiminn = new Adimin();
                adiminn.setId(user1.getId());
//              获取前台登录管理员的ip
                adiminn.setLastIp(adimin.getLastIp());
                UpdateWrapper updateWrapper = new UpdateWrapper();
//              id
                updateWrapper.eq("id",user1.getId());
//              前台传过的的IP
                updateWrapper.set("last_Ip", adimin.getLastIp());
//              登录次数：后台查询的次数+1
                updateWrapper.set("login_Count", user1.getLoginCount()+1);
//              执行修改结果不为true则返回前台为错
                if (!adiminservice.update(null, updateWrapper)) {
                    return Result.error();
                }

            }else {
//                前台传的IP为空则报ip为空
                return Result.ipnull();
            }
            return Result.ok().data("token",token);

//            否则error
        } else {
            return Result.error();
        }
    }
//    查询用户信息
    @GetMapping("/daofou/info")
    public Result linfo(String token){
//       验证传递的参数是否被修改
        String account = JwtUtils.getClaimsByToken(token).getSubject();
        String url = "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fwww.mianfeiwendang.com%2Fpic%2Fe42329c6446a771152a66375%2F1-810-jpg_6-1080-0-0-1080.jpg&refer=http%3A%2F%2Fwww.mianfeiwendang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1669344189&t=e434c014ad1d04d992ba4d10d5314218";
        return Result.ok().data("name",account).data("avatar",url);

//            否则error
//        }else {
//            return Result.error();
//        }
    }
    @PostMapping("/daofou/logout")
    public Result logout(){
        return Result.ok();
    }

    //    分页查询
    @PostMapping("/daofou/findByPage")
    public Result findBypage(@RequestBody QueryPageParam queryPageParam){
//        System.out.println(">>>>>>>>"+queryPageParam.getCurrent());
        HashMap param = queryPageParam.getParam();

        LambdaQueryWrapper<Adimin> lambdaQueryWrapper = new LambdaQueryWrapper();

        System.out.println(param.get("id")+">>>>>>>>>>>>>>>>");
        //      判断id内是否有值，有则直接搜索boos内的值
        if (StringUtils.isNotBlank((String)param.get("id")) && !"null".equals(param.get("id"))){
            int id = Integer.parseInt((String)param.get("id"));
            lambdaQueryWrapper.eq(Adimin::getId,id);
        }
        //      判断account内是否有值并且不等于null，有着like模糊搜索buname内的值
        if (StringUtils.isNotBlank((String) param.get("account")) && !"null".equals(param.get("account"))){
            String account = (String) param.get("account");
            lambdaQueryWrapper.like(Adimin::getAccount,account);
        }
        //      判断boos内是否有值，有则直接搜索boos内的值
        if (StringUtils.isNotBlank((String) param.get("realName"))&& !"null".equals(param.get("realName"))){
            String realName = (String) param.get("realName");
            lambdaQueryWrapper.like(Adimin::getRealName,realName);
        }
//        设置起始值及每页条数
        Page<Adimin> adiminPage = new Page<>(queryPageParam.getCurrent(),queryPageParam.getSize());
        IPage iPage = adiminservice.selectPagecc(adiminPage,lambdaQueryWrapper);
//        System.out.println("bumenPage=="+bumenPage.toString()+"iPage====="+iPage);
        return Result.ok().data("adimin",iPage);
    }
    //    新增
    @PostMapping("/daofou/DelAdimin")
    public Result addBypage(@RequestBody Adimin adiminn){

//        // 我们没有自定义id，它会帮我们自动生成id
//        Adimin adimin = new Adimin();
//        adimin.setAccount(adiminn.getAccount());
//        adimin.setPwd(adiminn.getPwd());
//        adimin.setRealName(adiminn.getRealName());
//        adimin.setRoles(adiminn.getRoles());
//        adimin.setLastIp(adiminn.getLastIp());
//        adimin.setLastTime(adiminn.getLastTime());
//        adimin.set(adiminn.get);
//        Bumen bumen =new Bumen();
//        bumen.setBuname(img.getBuname());
//        bumen.setBoos(img.getBoos());
//        int result=bumenMapper.insert(bumen);
//
//        System.out.println(result);// 受影响的行数

//        System.out.println(bumen);//可以发现，id会自动回填
        return Result.ok();
    }

    //    删除管理员账号,逻辑删除
    @GetMapping("/daofou/DelAdimin")
    public Result addBypage(BigInteger id){
//        判断传参是否有值
        if(id != null){
            UpdateWrapper updateWrapper = new UpdateWrapper();
//              id
            updateWrapper.eq("id",id);
//              前台传过的的IP
            updateWrapper.set("is_Del",2);
            System.out.println("执行结果"+adiminservice.update(null, updateWrapper));
//              执行修改结果不为true则返回前台为错
            if(adiminservice.update(null, updateWrapper)) {
                return Result.ok();
            }
        }
        return Result.error();
    }
//    获取需要修改的管理员信息
    @GetMapping("/daofou/ToUpAdimin")
    public Result toupBypage(BigInteger id){
        LambdaQueryWrapper<Adimin> lambdaQueryWrapper = new LambdaQueryWrapper();
        //      判断id内是否有值，有则直接搜索boos内的值
        if (id != null){
            lambdaQueryWrapper.eq(Adimin::getId,id);
            Adimin adimin = adiminservice.getById(id);
//          避免前台时间戳要再次修改
            adimin.setLastTime(adimin.getLastTime()*1000);
            return Result.ok().data("adimin",adimin);
        }
        return Result.error();
    }
// 修改管理员信息
    @PostMapping("/daofou/upAdimin")
    public Result upBypage(@RequestBody Adimin adimin){
        System.out.println("修改的值"+adimin);
//    return null;}
//    public Result upBypagee(Adimin adimin){
//         判断传参是否有值
        if(adimin.getId() != null){
            UpdateWrapper updateWrapper = new UpdateWrapper();
//            id
            updateWrapper.eq("id",adimin.getId());
//            用户名
            if (StringUtils.isNotBlank(adimin.getAccount())&& !"null".equals(adimin.getAccount())){
                updateWrapper.set("account",adimin.getAccount());
            }
//            密码
            if (StringUtils.isNotBlank(adimin.getPwd())&& !"null".equals(adimin.getPwd())){
                updateWrapper.set("pwd",adimin.getPwd());
            }
//            姓名
            if (StringUtils.isNotBlank(adimin.getRealName())&& !"null".equals(adimin.getRealName())){
                updateWrapper.set("real_name",adimin.getRealName());
            }
//            权限
            if (StringUtils.isNotBlank(adimin.getRoles())&& !"null".equals(adimin.getRoles())){
                updateWrapper.set("roles",adimin.getRoles());
            }
//            ip
            if (StringUtils.isNotBlank(adimin.getLastIp())&& !"null".equals(adimin.getLastIp())){
                updateWrapper.set("last_ip",adimin.getLastIp());
            }
//            时间
            if (adimin.getLastTime()>=0){
//                long a=adimin.getLastTime()-adimin.getLastTime()%1000;
//                System.out.println("时间:"+(adimin.getLastTime()-adimin.getLastTime()%1000)/1000);
                updateWrapper.set("last_time",(adimin.getLastTime()-adimin.getLastTime()%1000)/1000);
            }
//            登录次数
            if (adimin.getLoginCount()>=0){
                updateWrapper.set("login_count",adimin.getLoginCount());
            }
//          级别
            if (adimin.getLevel()>=0){
                updateWrapper.set("level",adimin.getLevel());
            }
//          状态
            if (adimin.getStatus()>=0){
                updateWrapper.set("status",adimin.getStatus());
            }
//          状态
            if (adimin.getStatus()>=0){
                updateWrapper.set("status",adimin.getStatus());
            }
//          删除的状态
            if (adimin.getIsDel()>=0){
                updateWrapper.set("is_del",adimin.getIsDel());
            }
//              前台传过的的IP

            System.out.println("执行结果"+adiminservice.update(null, updateWrapper));
//              执行修改结果不为true则返回前台为错
            if(adiminservice.update(null, updateWrapper)) {
                return Result.ok();
            }
        }
        return Result.error();
    }
}
